Compression of digital video data is used for many applications including transmission over bandwidth-constrained channels, such as direct broadcast satellite and storage on optical media. In order to achieve more efficient compression, complex computationally intensive processes are used for encoding (compressing) and decoding (decompressing) video. For example, although MPEG-2 is known as a very efficient method for compressing video, some new, more efficient standards (i.e., “Advanced Video Coding” standard H.264 published by the International Telecommunication Union Telecommunication Standardization Sector, Geneva, Switzerland) are being developed.
In the H.264 standard, a macroblock represents a 16 horizontal (H) by 16 vertical (V) array of pixels having 16 H×16V luminance samples and 8 H×8V each of Cb and Cr chrominance samples. Referring to FIG. 1, when macroblock adaptive field/frame coding is used, macroblocks are coded in vertically adjacent pairs that comprise an array of 16 H×32V pixels 10 (i.e., 16 H×32V luminance samples and 8 H×16V each of Cb and Cr chrominance samples) from a frame. Each macroblock pair 10 is coded either as two frame macroblocks 12a-b (i.e., two sets of vertically adjacent 16 H×16V pixels from the frame) or as two field macroblocks 14a-b (i.e., one set from each of two fields of 16 H×16V pixels).
Hereafter the notation “macroblock (pair)” is used to mean (i) a single macroblock if macroblock adaptive field/frame coding is not used and (ii) a macroblock pair if macroblock adaptive field/frame coding is used. The H.264 standard defines storing motion vectors for decoded macroblocks (pairs) for use in decoding other macroblocks (pairs). Specifically, to reconstruct the motion vectors for a current macroblock (pair) a decoder uses one of two sets of motion vectors. The first set involves motion vectors from neighboring macroblocks (pairs) in a current picture. Referring to FIG. 2, the first set of constructed motion vectors for the current macroblock (pair) 18 includes motion vectors for a macroblock (pair) 20 to the left, motion vectors for a macroblock (pair) 22 above and motion vectors for a macroblock (pair) 24 above and to the right. A second set of constructed motion vectors involves co-located motion vectors in a different picture (i.e., the motion vectors from a macroblock (pair) in the same position as the current macroblock (pair) 18 but in a different picture.) Typically, a decoder embodied in an integrated circuit (IC) would use a small data cache to hold the motion vectors for one row of macroblock (pairs) for the neighbor macroblocks (pairs) in the same picture to reduce the data written to and read from an external memory, where the cache holds one macroblock (pair) row of vectors. However, the motion vectors retained for future use, such as co-located motion vectors, are typically stored to the external memory and consume considerable storage space. Unfortunately, storing or caching large numbers of motion vectors increases a cost of a decoding or encoding system. The external memories and/or internal caches are commonly large circuits to hold all of the motion vector data. Furthermore, the external memory devices are often implemented with high speed technology to maintain sufficient data transfer rates.